package com.admin.education.services.Interfaces;

import com.admin.education.common.exceptions.BadRequestException;
import com.admin.education.common.exceptions.ResourceNotFoundException;
import com.admin.education.dataTransferObject.PageRequest;
import com.admin.education.dataTransferObject.PageResponse;
import com.admin.education.dataTransferObject.ServicesExcuteResult;
import com.admin.education.dataTransferObject.user.LoginRequest;
import com.admin.education.dataTransferObject.user.Request.BindingInformationRequest;
import com.admin.education.dataTransferObject.user.Response.LoginResponse;
import com.admin.education.dataTransferObject.userAnswerSheet.UserAnswerSheetTransfer;
import com.admin.education.dataTransferObject.userInformation.UserInformationTransfer;
import com.admin.education.models.User;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

public interface IUserService {
    ServicesExcuteResult<LoginResponse> Login(@Valid LoginRequest loginRequest) throws ResourceNotFoundException;
    ServicesExcuteResult Binding(long userId,@Valid BindingInformationRequest bindingInformationRequest) throws BadRequestException, ResourceNotFoundException;
    ServicesExcuteResult<List<UserInformationTransfer>> QueryUserInformations(long userId) throws ResourceNotFoundException;
    ServicesExcuteResult<UserInformationTransfer> ChangeAuth(long userId,long userInformation) throws BadRequestException, ResourceNotFoundException;
    ServicesExcuteResult<User> GetUser(@NotBlank String openId) throws ResourceNotFoundException;
    ServicesExcuteResult<PageResponse<UserAnswerSheetTransfer>> queryUserAnswerSheetByUserId(long userInformationId,@NotNull @Valid PageRequest pageRequest);
    ServicesExcuteResult attentionSomeOne(long userInformationId,long fansId) throws ResourceNotFoundException;
    ServicesExcuteResult cancelAttentionSomeOne(long userInformationId,long fansId) throws ResourceNotFoundException;
    ServicesExcuteResult<Boolean>  queryAttentsion(long userInformationId,long fansId) throws ResourceNotFoundException;
    ServicesExcuteResult<UserInformationTransfer> getCurrentInformation(long usrInformationId) throws ResourceNotFoundException;
    ServicesExcuteResult<PageResponse<UserInformationTransfer>> getAttentions(long userInformationId,@Valid PageRequest pageRequest);
    ServicesExcuteResult<PageResponse<UserInformationTransfer>> getFans(long userInformationId,@Valid PageRequest pageRequest);
}
